package URLRandom;

import GestorBDatos.Usuario;
import java.util.Properties;
import javax.mail.Address;

import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

/**
 *
 * @author Roberto
 */
public class URLRandom {
    private static final int LONGITUD_URL = 100;
    private static final String DIRECCION_WEB = "155.210.68.161";
    private static final String PUERTO = "8443";
//    private static final String DIRECCION_WEB = "localhost";
//    private static final String PUERTO = "8084";
    private static final String EMAIL_REMITENTE = "practica.seguridad.informatica@gmail.com";
    private static final char[] PASS_REMITENTE = new char[] {'r', 'o', 'J', 'U', 'j', 'a', 'v', 'i', 'e', 'r', '7', '7'};
    private static final String ASUNTO = "Cambio de contraseña";
    private static final String URL_RESET = "https://" + DIRECCION_WEB + ":" + PUERTO + "/Seguridad_Informatica/Pantalla_reset_pass.jsp?url=";
//    private static final String URL_RESET = "http://localhost:8084/Seguridad_Informatica/Pantalla_reset_pass.jsp?url=";
    
    public String generarURL(String login) {
        String base = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!";
        int longitudURL = LONGITUD_URL;
        String URL = "";
        int longitud = base.length();

        for (int i = 0; i < longitudURL;i++){
            int numero = (int) (Math.random() * (longitud));
            String caracter = base.substring(numero, numero + 1);
            URL = URL + caracter; 
        }
        
        return URL;
    }
    
    public boolean mandarURL(String URL, Usuario user) {
        try {
            // Propiedades de la conexión
            Properties props = new Properties();
            props.setProperty("mail.smtp.host", "smtp.gmail.com");
            props.setProperty("mail.smtp.starttls.enable", "true");
            props.setProperty("mail.smtp.port", "587");
            props.setProperty("mail.smtp.auth", "true");

            // Preparamos la sesion
            Session session = Session.getDefaultInstance(props);

            //Recoger los datos
            String str_De = EMAIL_REMITENTE;
            String str_PwRemitente = new String(PASS_REMITENTE);
            String str_Para = user.getCorreo();
            String str_Asunto = ASUNTO;
            String str_Mensaje = "Estimado " + user.getNombre() + ":\n"
                    + "Si pulsa en el siguiente enlace, le llevara a una pagina"
                    + " para modificar su contraseña:\n"
                    + URL_RESET + URL + "&login=" + user.getLogin() + "\n"
                    + "Si no pulsas el enlace expirara en 1 hora.";
            //Obtenemos los destinatarios
            String destinos[] = str_Para.split(",");

            // Construimos el mensaje
            MimeMessage message = new MimeMessage(session);

            message.setFrom(new InternetAddress(str_De));

    //Otra forma de especificar las direcciones de email 
            //a quienes se enviar el correo electronico
            //Forma 1
            //Address [] receptores = new Address []{
            //      new InternetAddress ("fuerenio@gmail.com"),
            //      new InternetAddress ("gonzasilve@gmail.com")
            //  };
            //Forma 2
            //  Address [] receptores = new Address []{
            //      new InternetAddress ( str_De )
            // };
            //Forma 3
            Address[] receptores = new Address[destinos.length];
            int j = 0;
            while (j < destinos.length) {
                receptores[j] = new InternetAddress(destinos[j]);
                j++;
            }

            //receptores.
            message.addRecipients(Message.RecipientType.TO, receptores);
            message.setSubject(str_Asunto);
            message.setText(str_Mensaje);

            // Lo enviamos.
            Transport t = session.getTransport("smtp");
            t.connect(str_De, str_PwRemitente);
            t.sendMessage(message, message.getRecipients(Message.RecipientType.TO));

            // Cierre de la conexion.
            t.close();
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
    
}
